A storage fabric may include multiple storage controllers to store and manage data on behalf of client devices. A storage controller may be a physical device or virtual appliance (also referred to herein as a virtual storage controller), each with their own instance of an operating system. The operating system may operate independently as a single node, or coordinate a cluster of nodes as a single system.
A physical storage controller in a storage fabric can utilize non-volatile memory to store critical state (e.g., a transaction log for write transactions which are staged prior to being committed to disk) in the physical storage controller device. Since the memory is non-volatile, the stored information will persist should there be a failure in order to allow the critical state, including any pending write transactions at the time of the failure for example, to be maintained.
However a virtual storage controller in the storage fabric may not have access to suitable non-volatile memory of a host device on which the virtual storage controller is executing. Alternatively, access to suitable non-volatile memory may be complex and/or difficult to obtain and/or manage and may be different for various providers of host devices.
Accordingly, critical state, such as a transaction log in one example, is maintained by each of the virtual storage controllers in a volatile memory and is synchronously flushed to a persistent or non-volatile data storage device, such as a disk on one of the storage server devices in the storage fabric, in order to allow the virtual storage controllers to maintain the critical state. However, the synchronous flushing of transaction log information is expensive and limits the speed with which the virtual storage controllers can perform write operations, which is undesirable.